// 引入模块
var mongodb = require("mongodb");
// 创建对象,用来连接数据
var MongoClient = mongodb.MongoClient;
// 数据库地址
var dbUrl = "mongodb://localhost:27017";
// 连接数据库的名称
var dbName = "my2107";

// 关联数据库的封装
function connectMGDB (res, cb) {
    MongoClient.connect(dbUrl, { useNewUrlParser: true }, function (err, db) {
        if (err) {
            console.log("连接数据库失败");
            res.send({ code: 404, msg: "数据库连接失败" })
        } else {
            console.log("连接数据库成功");
            // 关联数据库
            var dbase = db.db(dbName);

            // 回调函数
            cb(dbase, db)
        }
    })
}

// 插入一条数据{}
module.exports.insertOne = function (res, obj, cName, cb) {
    // 要存放的数据是传过来obj
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).insertOne(obj, function (err, result) {
            cb(err, result, db);
        })
    })
}

// 插入多条数据[]
module.exports.insertMany = function (res, arr, cName, cb) {
    // 要存放的数据是传过来arr
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).insertMany(arr, function (err, result) {
            cb(err, result, db);
        })
    })
}

// 删除一条数据
module.exports.deleteOne = function (res, obj, cName, cb) {
    // 要删除的数据是传过来obj
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).deleteOne(obj, function (err, result) {
            cb(err, result, db);
        })
    })
}

// 删除多条数据
module.exports.deleteMany = function (res, obj, cName, cb) {
    // 要删除的数据是传过来obj
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).deleteMany(obj, function (err, result) {
            cb(err, result, db);
        })
    })
}

// 修改一条数据
module.exports.updateOne = function (res, whereObj, updateObj, cName, cb) {
    // 要查询的数据是传过来whereObj
    // 要修改的数据是传过来updateObj
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).updateOne(whereObj, updateObj, function (err, result) {
            cb(err, result, db);
        })
    })
}

// 修改多条数据
module.exports.updateMany = function (res, whereObj, updateObj, cName, cb) {
    // 要查询的数据是传过来whereObj
    // 要修改的数据是传过来updateObj
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).updateMany(whereObj, updateObj, function (err, result) {
            cb(err, result, db);
        })
    })
}

// 查找多条数据
module.exports.find = function (res, whereObj, cName, cb) {
    // 要查询的数据是传过来whereObj

    whereObj.find ? whereObj.find : whereObj.find = {};
    whereObj.sort ? whereObj.sort : whereObj.sort = {};
    whereObj.limit ? whereObj.limit -= 0 : whereObj.limit = 0;
    whereObj.skip ? whereObj.skip -= 0 : whereObj.skip = 0;

    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).find(whereObj.find).sort(whereObj.sort).limit(whereObj.limit).skip(whereObj.skip).toArray(function (err, result) {
            cb(err, result, db);
        })
    })
}

// 查询数据条数
module.exports.count = function (res, whereObj, cName, cb) {
    // 要查询的数据是传过来whereObj
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).count(whereObj).then(function (count) {
            cb(count, db);
        })
    })
}

// 删除集合(全部删除)
module.exports.drop = function (res, cName, cb) {
    // 调用数据库
    connectMGDB(res, function (dbase, db) {
        dbase.collection(cName).drop(function (err, bool) {
            cb(err, bool, db);
        })
    })
}

